﻿using System;
using System.Collections.Generic;
using System.Text;
using ChemicalEquilibrium;

namespace NeuralModule
{
    /// <summary>
    /// 模块
    /// </summary>
    public abstract class Module
    {
        public Random R = new Random();

        public List<ThreadEventWait> TEWs = new List<ThreadEventWait>();

        public IonicEquilibrium IE_K, IE_Na, IE_Na_T;

        #region 离子
        public Queue<Reactant>
            //膜内离子
            IonInK = new Queue<Reactant>(),
            IonInNa = new Queue<Reactant>(),
            IonInCa = new Queue<Reactant>(),
            IonInCl = new Queue<Reactant>(),

            //膜外离子
            IonOutK = new Queue<Reactant>(),
            IonOutNa = new Queue<Reactant>(),
            IonOutCa = new Queue<Reactant>(),
            IonOutCl = new Queue<Reactant>();
        #endregion

        #region 离子通道
        //自由离子通道
        public Queue<Reactant> ChannelFreeK, ChannelFreeNa, ChannelFreeCa, ChannelFreeCl;

        //电压门控离子通道
        public Queue<Reactant> ChannelVoltageK, ChannelVoltageNa, ChannelVoltageCa, ChannelVoltageCl;

        //递质门控离子通道
        public Queue<Reactant> ChannelTransmitterK, ChannelTransmitterNa, ChannelTransmitterCa, ChannelTransmitterCl;

        //离子泵
        public Queue<Reactant> PumpNaK, PumpCl, PumpCa;
        #endregion

        #region 能量
        public Queue<Reactant>
            EnergyLight,            //光能
            EnergySound,            //声音
            EnergySmell,            //气味
            EnergyTaste,            //味道
            EnergyTouch,            //触感

            Energy;                 //能量
        #endregion

        #region 神经递质
        public Queue<Reactant>
            TransmitterACh,        //乙酰胆碱
            TransmitterDA,         //多巴胺
            TransmitterNE,         //去甲肾上腺素
            TransmitterE,          //肾上腺素
            Transmitter5HT,        //5-羟色胺
            TransmitterGlu,        //谷氨酸
            TransmitterGly,        //甘氨酸
            TransmitterGABA,       //γ-氨基丁酸

            TransmitterS,          //兴奋性递质
            TransmitterI;          //抑制性递质
        #endregion



        #region 酶
        public Queue<Reactant>
            //合成酶
            EnzymeChAT,         //胆碱乙酰基转移酶ChAT:催化乙酰辅酶A与胆碱合成乙酰胆碱
            EnzymeTH,           //酪氨酸羟化酶TH:将酪氨酸催化合成多巴dopa
            EnzymeDDB,          //多巴脱羧酶DOPA decarboxylase:催化多巴DOPA形成多巴胺DA
            EnzymeDBH,          //多巴胺-β-羟化酶DBH:催化多巴胺形成去甲肾上腺素NE
            EnzymePNMT,         //苯乙醇胺氮位甲基移位酶PNMT:催化去甲肾上腺素成为肾上腺素
            Enzyme5HTDB,        //5-羟色胺酸脱羧酶5HTDB:5-羟色胺酸脱羧生成5-羟色胺
            EnzymeGlu,          //谷氨酸合成酶
            EnzymeGly,          //甘氨酸合成酶
            EnzymeGAD,          //谷氨酸脱羧酶GAD:催化谷氨酸合成GABA


            //降解酶
            EnzymeAChE,         //胆碱酯酶AChE:将乙酰胆碱降解为胆碱和乙酸
            EnzymeGABAT,        //γ－氨基丁酸转氨酶:降解GABA

            //转运体
            NeuroTransporterCA,  //儿茶酚胺CA转运体:存在于神经末梢的细胞膜上,前突触重摄取已释放的递质(DA,NE,E)
            NeuroTransporter5HT, //5-羟色胺转运体:将突触间隙的5-羟色胺重摄取至突触前轴突末梢内
            NeuroTransporterAA,  //氨基酸(Glu,Gly)转运体

            //激活酶
            EnzymeAC,           //腺苷酸环化酶:作用于ATP生成环腺苷酸cAMP
            EnzymePKA,          //蛋白激酶A:使底物蛋白质磷酸化(使离子通道激活)
            EnzymePKC,          //蛋白激酶C:使底物蛋白质磷酸化(使离子通道激活)
            EnzymeCaMK,         //钙-钙调素依赖蛋白激酶:使底物蛋白质磷酸化(使离子通道激活)
            EnzymeGC,           //鸟苷酸环化酶:作用于GTP生成环鸟苷酸cGMP
            EnzymePLC,          //磷脂酶C:作用于肌醇磷脂PIP2,PIP2分解为二酰基甘油DAG和肌醇三磷酸IP3

            //抑制酶
            EnzymePDE,          //磷酸二酯酶:水解cAMP, 水解cGMP
            EnzymePP,           //磷蛋白磷酸酶:使底物蛋白质脱磷酸(离子通道失活)


            Enzyme;

            
        #endregion

        #region 第二信使
        public Queue<Reactant>
            SecondCa,         //钙离子:触发突触前递质释放;激活酶(激活钙-钙调素依赖蛋白激酶CaMK);调节多种通道开放;影响基因表达
            SecondcAMP,       //环腺苷酸:激活蛋白激酶A
            SecondcGMP,       //环鸟甘酸:激活离子通道
            SecondIP3,        //三磷酸肌醇IP3:IP3激活IP3门控钙通道
            SecondDAG,        //二脂酰甘油脂:可激活蛋白激酶C
            SecondNO;         //一氧化氮
        #endregion

        #region G蛋白
        public Queue<Reactant>
            GProteinS1S2,       //失活的G蛋白
            GProteinS1,         //Gsα:激活腺苷酸环化酶cAMP;直接与K通道Ca通道耦联
            GProteinS2,         //Gsβγ:直接与K通道耦联;抑制Ca通道

            GProteinI,          //抑制腺苷酸环化酶cAMP
            GProteinT,          //激活磷酸二脂酶PDE
            GProteinO,          //
            GProteinQ;          //激活的G蛋白激活磷脂酶C
        #endregion

        #region 受体
        public Queue<Reactant>
            ReceptorAChN,       //烟碱受体      烟碱
            ReceptorAChMGProteinS,       //毒蕈碱受体    毒蕈碱

            ReceptorNE1GProteinI,        //α受体        苯肾上腺素
            ReceptorNE2GProteinS,        //β受体        异丙肾上腺素

            ReceptorGluAMPAChannelKNa,    //AMPA          AMPA
            ReceptorGluNMDAChannelKVoltageNaCa,    //NMDA          NMDA
            ReceptorGluKA,      //KA            海人藻酸
            ReceptorGluGProtein,

            ReceptorGlyChannelCl,   //
            ReceptorGABAAChannelCl,      //GABAA         蝇蕈醇
            ReceptorGABABGProteinS,      //GABAB         氨苯氯丁酸

            Receptor5HTGProtein,
            ReceptorDAGProtein,

            ReceptorEnergyChannelNa = new Queue<Reactant>(),
            ReceptorEnergyChannelNa_ = new Queue<Reactant>(),

            Receptor;
        #endregion

        public Module()
        {
            Initialize();
        }

        public abstract void Initialize();


    }
}
